use std::time::Duration;
use actix_web::{web, App, HttpResponse, HttpServer, Responder};

#[actix_web::main]
async fn main() {
    HttpServer::new(|| App::new().route("/", web::get().to(HttpResponse::Ok)))
        // HttpServer默认自动启动操作系统物理CPU数量个Http Worker,可以通过workers方法修改数量
        .workers(4);
}

fn my_handler()->impl Responder{
    // 糟糕的做法！将导致当前工作线程挂起
    std::thread::sleep(Duration::from_secs(5));
    "response"
}
// my_handler应该被修改为my_handler_2
// 任何长的、非 CPU 限制的操作（例如 I/O、数据库操作等）都应该表示为 future 或异步函数。异步处理程序由工作线程同时执行，因此不会阻止执行
async fn my_handler_2() -> impl Responder {
    // <-- 好的。工作线程将在这里处理其他请求
    tokio::time::sleep(Duration::from_secs(5)).await;
    "response"
}